<?php

namespace Drinkiit\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

use Drinkiit\BlogBundle\Entity\Article ;
use Drinkiit\BlogBundle\Entity\Produit ;

class AdminStatistiquesController extends Controller
{
	
	public function em($objet) {
		return $this->getDoctrine()->getEntityManager()->getRepository($objet) ;
	}
	
	public function indexAction()
    {
		$liste_type_produit = $this->em('DrinkiitBlogBundle:Type_produit')->findAll() ; //récupération de la liste des types de produits

		$sortie = array(); //la liste dans laquelle on stockera la quantite consommée d'un produit durant une semaine précise
		$semainevide = array() ; //la liste des semaines où aucun produit n'a été vendu
		for ($i = 1; $i <= 52; $i++)
		{
			$semainevide[$i] = true ; //initialisation de toutes les semaines à true="aucun produit vendu"
		}
		
		
		foreach($liste_type_produit as $type_produit) {
			$liste_produit = $this->em('DrinkiitBlogBundle:Produit')->findBy( array('type_produit' => $type_produit->getId())) ; //récupération de la liste des produits du $type_produit considéré
			
			foreach($liste_produit as $produit) {
				$liste_article = $this->em('DrinkiitBlogBundle:Article')->findBy(array('produit' => $produit->getId())) ; //récupération de la liste des article du $produit considéré
				
				for ($i = 1; $i <= 52 ; $i++)
				{
					$sortie[(string)$produit->getTypeProduit()][(string)$produit->getNomProduit()][$i]['quantite'] = 0 ; //initialisation de la quantité commandé d'un produit dans une semaine
				}
				
				foreach($liste_article as $article){
					$liste_articlecommande = $this->em('DrinkiitBlogBundle:Article_commande')->findBy(array('type_article' => $article->getId())) ; //récupération de la liste des article_commande du $article considéré 
					
					foreach($liste_articlecommande as $article_commande){
						$date_actuelle = new \DateTime("now") ; //récupération de la date d'aujourd'hui
						
						$semaine = date_format($date_actuelle, 'W') + 1 ; //récupération du numéro de la semaine prochaine, nécessaire pour l'affichage
						
						$date_commande = $article_commande->getArticleCommande()->getDateCommande() ; //récupération de la date de la commande
						if(date_diff($date_actuelle, $date_commande)->format('%a') <= 365) { //test si la commande a eu lieu dans l'année qui vient de s'écouler,
							
							$weekNum = date_format($article_commande->getArticleCommande()->getDateCommande(), 'W'); //récupération du numéro de la semaine de la commande
							
							$sortie[(string)$produit->getTypeProduit()][(string)$produit->getNomProduit()][$weekNum]['quantite'] += $article->getQuantite() ; //mise à jour de la quantité consommé du produit cette semaine là
							
						}
					}
				}
				
				for ($i = 1; $i <= 52 ; $i++) {
					if($sortie[(string)$produit->getTypeProduit()][(string)$produit->getNomProduit()][$i]['quantite'] > 0){ //test pour savoir si ce produit a été consommé pendant une semaine donnée
						$semainevide[$i] = false ; //cette semaine n'est pas "vide", il y a eu des ventes, on affiche les ventes de tous les produits de cette semaine
					}
				}
			}
		}
		
		
		$this->get('logger')->info("[INFO] Page de admin stats on affiche ".count($liste_type_produit)." types produits et les quantités achetées.") ;
		
        return $this->render('DrinkiitBlogBundle:Admin:Statistiques.html.twig', array(
			'titre' => 'Drinkiit -- vous souhaite la bienvenue !!!',
			'sortie' => $sortie,
			'semaine' => $semaine,
			'liste_type_produit' => $liste_type_produit,
			'semainevide' => $semainevide,
		));
    }
    
}
